#pragma once
#include "SFML\Graphics\Texture.hpp"
#include "IDrawable.hpp"
#include "IUpdateable.hpp"
#include "ITransformable.hpp"

namespace rh
{
	class Frame : public rh::IDrawable, public rh::IUpdateable, public rh::ITransformable
	{
	private:
		sf::Texture* _texture;
		sf::IntRect _displayArea;
		sf::Sprite _displaySprite;

		bool _isVisible;

	public:
		Frame(sf::Texture* texture, sf::IntRect displayArea);
		Frame();
		virtual ~Frame(void);

		virtual void Draw(sf::RenderWindow& renderWindow, const sf::RenderStates & renderState);
		virtual void Update(const sf::Time& elapsedTime, const sf::Time& totalElapsedTime);

		virtual void setPosition(const sf::Vector2f& position);
		virtual void setScale(const sf::Vector2f& scale);
		virtual void setRotation(float rotation);
		virtual void setDepth(float zDepth);
		virtual void setColor(sf::Color color);
		virtual void setVisibility(bool isVisible);

		virtual const sf::Vector2f getPosition();
		virtual const sf::Vector2f getScale();
		virtual const float getRotation();
		virtual const sf::Color getColor(void);
		
	};

}